From 5ee6a57846fbe6cda8cb13f32856f41225aeee08 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Tue, 17 Dec 2019 14:39:48 -0700 Subject: [PATCH] use QDebug in logging. (#438) * use QDebug in logging. This gives us full access to all the methods, stream operators and manipulators that QDebug has access to. * silence warning on unhandled fix values in nmea. --- nmea.cc | 4 ++-- src/core/logging.h | 53 +++++++++++++++++----------------------------- 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/nmea.cc b/nmea.cc index 63c4db61d..506508a03 100644 --- a/nmea.cc +++ b/nmea.cc @@ -547,7 +547,7 @@ gpgga_parse(char* ibuf) waypt->fix = fix_pps; break; default: - Warning() << MYNAME << ": unknown vix value" << fix; + break; } nmea_release_wpt(curr_waypt); @@ -963,7 +963,7 @@ nmea_parse_one_line(char* ibuf) int ckcmp; sscanf(ck, "%2X", &ckcmp); if (ckval != ckcmp) { - Warning() << "Invalid NMEA checksum. Computed " << ckval << " but found " << ckcmp << ". Ignoring sentence"; + Warning().nospace() << hex << "Invalid NMEA checksum. Computed 0x" << ckval << " but found 0x" << ckcmp << ". Ignoring sentence."; return; } diff --git a/src/core/logging.h b/src/core/logging.h index ffa34637f..73a58ac33 100644 --- a/src/core/logging.h +++ b/src/core/logging.h @@ -19,49 +19,34 @@ #ifndef gpsbabel_logging_h_included #define gpsbabel_logging_h_included -// A wrapper for QTextStream that provides a sensible Warning() and Fatal() -// with convenient stream operators. +// A wrapper for QDebug that provides a sensible Warning() and Fatal() +// with convenient functions, stream operators and manipulators. -#include -#include -#include //exit() +#include // for QDebug +#include // for QFile +#include // for QIODevice, QIODevice::WriteOnly +#include // for QString +#include // for QTextStream +#include // for stderr +#include // for exit -class Warning { - public: - explicit Warning(bool fatal = false) : - fatal_(fatal) { - file_.open(stderr, QIODevice::WriteOnly); - fileStream_.setDevice(&file_); + +class Warning : public QDebug { +public: + explicit Warning(bool fatal = false) : QDebug(&msg_), fatal_(fatal) { } ~Warning() { - fileStream_ << '\n'; + QFile file; + file.open(stderr, QIODevice::WriteOnly); + QTextStream fileStream(&file); + fileStream << msg_ << '\n'; + file.close(); if (fatal_) { - fileStream_.flush(); exit(1); } } - inline Warning& operator << (char d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (signed short d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (unsigned short d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (signed int d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (unsigned int d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (signed long d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (unsigned long d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (qint64 d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (quint64 d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (float d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (double d) { fileStream_ << d; return optionalSpace(); } - inline Warning& operator << (const char* d) { fileStream_ << QString::fromUtf8(d); return optionalSpace(); } - inline Warning& operator << (const QString& d) { fileStream_ << '\"' << d << '\"'; return optionalSpace(); } - inline Warning& operator << (const void* d) { fileStream_ << '\"' << d << '\"'; return optionalSpace(); } - - inline Warning& optionalSpace() { - fileStream_ << ' '; - return *this; - } private: - QFile file_; - QTextStream fileStream_; + QString msg_; bool fatal_; }; -- 2.30.2